# 创建集合set，set（）用来创建集合的函数、type（）用来查看数据类型
# 1、可以使用大括号来进行创建
s = {1,2,3,4}
#2、使用set（）函数来进行创建
ss = set('1234')
print(type(s))
print(type(ss))

#集合的添加和删除
#添加元素
s.add(6)
print(s)
#删除集合中的第一个元素
s.pop()
print(s)
#删除集合中的元素
s.remove(4)
print(s)



#创建元组
#创建空元组
tuple1 = ()
print(tuple1)
#创建带有元素的元组，可以有元素类型
tuple2 = (1,"a",3,"hello",2.2)
print(tuple2)
#创建只有一个元素的元组
tuple3 = (1,)
print(type(tuple3))

#使用tuple()函数将其他数据类型转换为元组类型。
# 语法格式：tuple（数据）
#将字符串转换元组
tuple1 = tuple('hello,world')
print(tuple1)
#将列表转换成元组
list1 = ['python','java','c++','c']
tuple2 = tuple(list1)
print(tuple2)


#从开始索引开始截取，截取到结束索引之前。
tuple1 = ('h','e','l','l','o')
#使用索引访问元组中的某个元素
#使用正数索引，从0开始
print(tuple2)
#使用负数索引，倒序从-1开始
print(tuple1[-4])

#使用切片访问元组中的一组元素，前闭后开
#使用正数切片
print(tuple1[1:4])
#指定步长
print(tuple1[1:4:2])
#使用负数切片
print(tuple1[-5:-1])
t1 = (12, 13, 14, 15)
t2 = ("acd", "nm")

# 修改元组元素操作是非法的
# t1 [0]= 100
# 链接元组创建一个新的元组，两个数据必须都是元组
t3 = t1 + t2
print(t3)


t1 = (1, 2, 3, 4, 5, [154, 111])
print(t1)

del t1
print(t1)

n=name
t=telephone
e=email
a=address


n = input('请输入联系人姓名：')
t = input('请输入联系人手机号：')
e = input('请输入电子邮箱：')
a = input('请输入联系地址：')
t1 = ("姓名：", n  ,"电话：", t , "邮箱：" ,e ,"地址：",a)
print(t1)



# 创建空列表
l1 =[]
print(l1)
# 创建带有元素的列表
l2 = [1, 2, 3, 4, "python", 2.2]
print(l2)
print(type(l2))





# 0 创建空列表
ll = list()
print(ll)
# 1 转化字符串
l3 = list("hellp")
print(l3)
# 2 转化元组
t1 = tuple("hello")
l4 = list(t1)
print(l4)
# 3 转化rang函数
r1 = range(5)   # 0 1 2 3 4
l5 = list(r1)
print(l5)


# 访问列表中的元素
# 使用索引访问元素示例：
# 使用索引访问列表中的摸个元素
# 使用索引访问列表中的元素
L1 = ['p', 'y', 't', 'y', 'h', 'q', 'w']
# 访问，使用正向索引
print(L1[4])
# 访问，使用反向索引
print(L1[-5])


# 使用切片形式访问列表中的元素
L2 = ['p', 'y', 't', 's', 'h', 'q', 'w']
# 使用正数切片，截取索引为2,3,4的元素，默认步长为1
print(L2[2:5])
# 取索引3-5的元素，末尾不用写
print(L2[3:])
# 取索引0-2的元素，开头不用写
print(L2[:3])
# 取索引1-5，步长2
print(L2[1::2])
# 使用负切片，  取后三个元素
print(L2[-3:])
# 使用负切片，取-5——-1，步长是2的元素
print(L2[-5:-1:2])




# 遍历列表
# list1 = [1 ,2 ,3 ,4]
# 使用for循环遍历列表
# for item in list1：
#           print(item)
l3 = [1, 2, 3, 4, 5, 6]
for i in l3:
    print(i)


# 修改列表元素
# 修改单个元素
l4 = [10, 56, 34, 2, 56, 44, 7]
# 将索引为2的元素值修改为100
l4[2] = 100
print(l4)

# 修改多个元素
l5 = [10, 56, 34, 2, 56, 44, 7]
# 修改第1~4个元素的值（不包括第四个元素）
l5[1:4:1] = [45, -56, 98]
print(l5)


# 列表中添加元素
# 1、append（）用于在列表的末尾追加元素
l6 = ['a', 'b', 'c']
l6.append('f')
print(l6)
# 列表添加列表
l6.append('e', 'f')
print(l6)


# 2、extend()在列表的末尾添加多个元素
l13 = ['a', 'b', 'c']
l13.extend('d')
print(l13)
# 添加列表
l13.extend(['e', 'f', 'g', 'h'])
print(l13)
l13.extend('world')
print(l13)



#  3、insert（）在列表的特定位置添加想要添加的特定元素
l14 = ['python', 'c', 'java']
# 插入元素，在索引为2处插入go元素
l14.insert(2, 'go')
print(l14)



# 删除元素
# remove删除：remove（）方法是一出掉列表里面的特定元素，但只会删除第一个和指定值相同的元素，而且必须保证该元素是存在的，否则会引发 valueError 错误
l15 = ['a', 'b', 'c', 'd']
l15.remove('a')
print(l15)


# pop（）方法用来删除列表中指定索引处的元素
l16 = [10, 56, 34, 2, 56, 44, 7]
# 删除索引为3的元素
l16.pop(3)
print(l16)
# 删除最后一个元素
l16.pop()
print(l16)
l16 = [1, 3, 4, 5, 6, 7, 8, 9]
l16.pop(4)
print(l16)
l16.pop()
print(l16)


# del 可以用来删除列表中单个元素或者一段连续的元素
l17 = ['a', 'b', 'c', 'd', 'e']
# 删除索引为1的元素
del l17[1]
print(l17)
l18 = [10, 56, 34, 2, 58, 44, 7]
# 删除索引为1-3的元素
del l18[1:4]
print(l18)
# 删除单个元素
l17=[1, 4, 8, 5, 6, 3, 2]
del l17[5]
print(l17)
# 删除8 5 6 这三个元素
del l17[2:5]
print(l17)

# 若将列表中所有元素全部删除，可使用列表的clear（）方法
l19 = ['a', 'b', 'c', 'a']
# 清空列表
l19.clear()
print(l19)
l18 = [5, 'a', 8, 'python', 9, 5]
l18.clear()
print(l18)


# 任务
# 创建两个空列表name list 和phon-list，用于储存联系人姓名和电话、
# 向列表中添加联系人信息：
# 输入联系人编号修改信息：
# 输入联系人编号删除信息：
# 使用clear（）清空通讯录。name-list=【张三，李四，王五，maliu】，phone-list=【123,234,258,598】
# name_list = []
# phone_list = []
# while 1:
#     phint('菜单：1.添加联系人 2、修改联系人 3、删除联系人')
#     chioce = input("请输入选择")
#     # 1. 添加联系人，包括姓名，手机号
#     if chioce == '1':
#         name_list.append(input("请输入联系人姓名"))
#         phone_list.append(input("请输入联系人手机号"))
#         print(name_list)
#         print(phone_list)
#     # 2.修改联系人信息
#     elif chioce == "2":
#         num = int(input("请输入联系人编号"))
#         if len(name_list) > 0 and num <= len(name_list):
#             name_list[num - 1] = input("修改联系人姓名")
#             phone_list[num - 1] = input("修改联系电话")
#         else:
#             print("联系人编号输入有误")
#         # 3.删除联系人信息
#     elif chioce =="3":
#         num = int(input("请输入联系人编号："))
#         if len(name_list) > 0 and num <=len(name_list):
#             name_list.pop(num-1)
#             phone_list.pop(num - 1)
#         else:
#             print("联系人编号输入有误")
#     else:
#         print("显示联系人信息")
#         print(name_list)
#         print(phone_list)


# 查找元素 index（）
ls1 = [1, 3, 5, 7, 'a', 'b', 8, 3, 'b',2]
print(ls1.index(3))
print(ls1.index('b', 6))
print(ls1.index('b', 6, 9))
print(ls1.index(0))


# count() 方法用来统计某个元素在列表中出现的次数 列表名。count（统计的value元素）
ls2 = [1, 3, 5, 7, 'a', 'b', 8, 3, 'b',2, 5, 5, 7, 1]
print(ls2.count(5))
print(ls2.count(0))
print(ls2.count('b'))


# 元素排序 sort（）函数用于原列表进行排序，如果指定参数，则使用指定的比较函数，
# 语法格式为：ls。sort（key=nome， reverse=false）
# 1、元素是字符串的排序
ls3 = ['1', '3', '44', '23', '99', '88', '56']
# 默认升序
ls3.sort()
print(ls3)
# 降序 reverse=true
ls3.sort(reverse=True)
print(ls3)

# 2、元素是数值的排序
ls4 = [1, 3, 44, 23, 99, 88, 56]
# 默认升序
ls4.sort()
print(ls4)
# 降序 reverse=true
ls4.sort(reverse=True)
print(ls4)


"""字典"""
# 字典的创建
# 1、使用{}创建字典语法格式:
# 字典名 = {'key1':'value1', 'key2':'value2',...,'keyn':valuen}
# 使用字符串作为key
d1 = {'数学': 95, '英语': 90, '语文': 80}
print(type(d1))
# 使用元祖和数字作为key
d2 = {(20, 30): 'great', 30:[1, 2, 3]}
print(type(d2))
# 创建空元祖
d3 = {}
print(d3)

# 2、用dict（）方法通过关键字的参数来创建字典格式：
#字典名= dict（str=value1， sty2=value2， str3=value3）
d4 = dict(数学=90, 语文=89, 英语=88 )
print(d4)


# 字典元素的访问
# 1、字典名[key]
d5 = {'数学': 95, '英语': 92, '语文': 84}
# 键存在，返回的是值value
print(d5['英语'])
# 键不存在，会引发一个keyerror错误
print(d5['python'])

# 2、get()方法来获取指定键对应的值，语法格式：字典名。get（ket【，default】）
d6 = {'数学': 95, '英语': 92, '语文': 84}
# 键存在
print(d6.get('语文'))
# 键存在，不写default，会返回none
print(d6.get('python'))
print(d6.get('pythong', '该键不存在'))


# 字典添加键值对
d7 = {'数学':95, '英语': 92, '语文': 84, 'python':99}
d7['可视化'] = 99
print(d7)

# 字典修改键值对
d8 = {'数学':95, '英语': 92, '语文': 84, 'python':99}
d8['英语'] = 100
print(d8)

# 字典删除键值对
d9 = {'数学':95, '英语': 92, '语文': 84, 'python':99}
# 1、使用del关键字
del d9['语文']
print(d9)
# 使用pop（）方法
d9.pop('英语')
print(d9)